//播放音乐详细

import {create} from 'zustand'
import {songsType, songUrl, songUrlDataType} from "@src/services/music.ts";


// 定义音频播放器的状态接口
interface AudioPlayerState {
    audio: HTMLAudioElement; // 音频对象
    isPlaying: boolean; // 当前是否正在播放
    songUrlData: songUrlDataType | null; // 当前播放的歌曲信息
    volume: number; // 当前音量
    progress: number; // 初始播放进度（百分比）
    percentage: () => number;
    song: songsType,
    setSong: (song: songsType) => void,
    // 方法
    play: () => void; // 播放音频
    pause: () => void; // 暂停音频
    setSongUrlData: (songUrlData: songUrlDataType) => void; // 加载新歌曲
    setVolume: (volume: number) => void; // 设置音量
    setProgress: (progress: number) => void; // 设置播放进度 百分比
}

const audio = new Audio()
const defaultSong: songsType = {
    id: 2083785152,
    ar: [{id: 7763, name: "G.E.M.邓紫棋"}],
    name: "唯一",
    al: {id: 174925713, picUrl: "https://p1.music.126.net/aJWtwvdYRXvKUpAE2C6NoA==/109951168919708423.jpg"},
    dt: 253735
}

//获取播放链接
const songUrlData = await songUrl(defaultSong.id).then((data) => {
    audio.src = data.data[0].url
    audio.load(); // 加载音频
    return data;
})

audio.load(); // 加载音频
// 使用 Zustand 创建音频播放器的状态管理
export const useAudioPlayer = create<AudioPlayerState>((set, get) => ({
    audio: audio, // 创建一个新的音频对象
    isPlaying: false, // 初始状态为未播放
    songUrlData: songUrlData, // 初始时没有加载歌曲
    volume: 1, // 初始音量为最大（1.0）
    progress: 0, // 初始播放进度为 0%
    song: defaultSong,//歌曲详细
    setSong: (s) => set({song: s}),
    // 播放音频
    play: () => {
        const {audio} = get();
        audio.play().catch((error) => {
            console.error('播放失败:', error);
        });
        set({isPlaying: true}); // 更新状态为正在播放
    },

    // 暂停音频
    pause: () => {
        const {audio} = get();
        audio.pause(); // 调用音频对象的暂停方法
        set({isPlaying: false}); // 更新状态为未播放
    },

    // 加载新歌曲
    setSongUrlData: (songUrlData: songUrlDataType) => {
        const {audio} = get();
        audio.src = songUrlData.data[0].url; // 设置音频源为新歌曲的 URL
        audio.load(); // 加载音频
        set({songUrlData: songUrlData, progress: 0}); // 更新当前歌曲信息并重置播放进度
    },

    // 设置音量
    setVolume: (volume: number) => {
        const {audio} = get();
        audio.volume = volume; // 设置音频对象的音量
        set({volume}); // 更新状态中的音量值
    },

    // 设置播放进度
    setProgress: (progress: number) => {
        const {audio} = get();
        audio.currentTime = (progress / 100) * audio.duration; // 根据百分比设置当前播放时间
        set({progress}); // 更新状态中的播放进度
    },
    //当前播放时间
    percentage: () => {
        const {audio} = get();
        return (audio.currentTime / audio.duration) * 100
    },
}));


// 监听音频播放结束事件
audio.addEventListener('ended', () => {
    useAudioPlayer.setState({isPlaying: false}); // 更新状态为未播放
});